package org.example.supplychain.domain;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;

/**
 * JdbcUtils 类用于获取数据库连接信息
 * 使用 Spring 框架的 @Value 注解从配置文件中读取数据库连接参数
 */
@Component
public class JdbcUtils {

    // 从配置文件中读取数据库 URL
    @Value("${spring.datasource.url}")
    private String url;

    // 从配置文件中读取数据库用户名
    @Value("${spring.datasource.username}")
    private String username;

    // 从配置文件中读取数据库密码
    @Value("${spring.datasource.password}")
    private String password;

    /**
     * 获取数据库信息，并将其存储在 HashMap 中返回
     * @return 包含数据库信息的 HashMap
     */
    public HashMap<String, String> getDBInfo() {
        // 例如 URL: jdbc:mysql://localhost:3306/supplychain?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        String[] mainParts = url.split("//")[1].split("/");
        // 分割出主机和端口部分，例如 "localhost:3306"
        String[] hostPort = mainParts[0].split(":");
        // 获取主机名
        String host = hostPort[0];
        // 获取端口号
        String port = hostPort[1];
        // 获取数据库名，例如 "supplychain"
        String dbName = mainParts[1].split("\\?")[0];


        // 将数据库信息存入 HashMap
        HashMap<String, String> result = new HashMap<>();
        result.put("url", url);
        result.put("host", host);
        result.put("port", port);
        result.put("dbName", dbName);
        result.put("userName", username);
        result.put("passWord", password);

        return result;
    }
}
